
import java.util.Arrays;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Administrator
 * \* Date: 2021/10/24
 * \* Time: 10:14
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
public class TestDemo {

    //找数组中 的最大值
    public static int maxNum(int []array){
        if(array==null)
            return -1;
        if(array.length==0)
            return -1;
        int max=array[0];
        for(int i=1;i<array.length;i++){
            if(max<array[i]){
                max=array[i];
            }
        }
        return max;
    }
    public static void main(String[] args) {
        int[] array={12,8,1,2,10};
        System.out.println(maxNum(array));
    }


    public static String myToString(int[] arr){
        String str="[";
        for(int i=0;i<arr.length;i++){
            str=str+arr[i];
            if(i!=arr.length-1){
                str=str+",";
            }
        }
        str=str+"]";
        return str;
    }//[1,2,3,4,5]
    public static void main11(String[] args) {
        int [] arr={1,2,3,4,5};
        System.out.println(Arrays.toString(arr));
        System.out.println(myToString(arr));

    }


    //如何交换数组的两个值
    public static void swap(int[] arr){
        int tmp=arr[0];
        arr[0]=arr[1];
        arr[1]=tmp;
    }

    public static void main9(String[] args) {
        int []arr={10,20};
        System.out.println("交换前："+ arr[0]+" "+arr[1]);
        swap(arr);
        System.out.println("交换后："+ arr[0]+" "+arr[1]);
    }

    public static void main8(String[] args) {
        int[] arr1={1,2,3,4,5};
        int[] arr2=arr1;
        //代表：arr2这个引用指向了arr1这个引用指向的对象
        //引用指向引用：这句话是错的，引用只能指向对象
        //int [] arr2=null;
        //这个引用不指向任何对象
        //思考一个引用能不能同时指向多个对象？
        /*arr1=new int[10];
        arr1=new int[2];
        arr1=new int[5];*/
        //一个引用只能保存一个对象的地址，

        //思考：引用一定是在栈上吗？
        //不一定，一个变量在不在栈上，是你变量的形式决定的，如果你就是一个局部变
        //实例成员变量，那就不一定就是在栈上了。
    }


    public static void func1(int[] arr){
        arr=new int[]{11,2,14,4,51,61};//通过引用的对象改
    }
    public static void func2(int[] arr){
        arr[0]=899;//直接通过形参的引用改
    }

    public static void main7(String[] args) {
        int []arr={1,2,3,4,5,6};
        System.out.println(Arrays.toString(arr));
        //func1(arr);
        func2(arr);
        System.out.println(Arrays.toString(arr));
        //虽然你传的是地址，但是传过去后，形参知识改变了自己的指向而已
    }


    //数组作为参数传递
    public static void printf(int[] arr){
        for(int i=0;i< arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    public static void main6(String[] args) {
        int []arr={1,2,3,4,5};
        printf(arr);//两个引用同时指向同一个地址
    }


    //数组作为方法的参数
    public static void main5(String[] args) {
        int []arr={1,2,3,4,5};
        int [] arr2=null;//这里代表这个引用不指向任何对象
        //System.out.println(arr2.length);//这里会报一个空指针异常
        System.out.println(arr2[0]);//这里也是空指针异常
        //遇到这种问题，找到底那个引用是空的的
    }

    public static void main4(String[] args) {
        int []arr={1,2,3,4,5};
        //打印数组的方式
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        //2 for each 循环  增强for循环
        for(int x:arr){
            System.out.print(x+" ");
        }
        System.out.println();
        //for循环和for each循环区别？
        //for循环是可以拿到下标的
        //for each循环是拿不到下标的——更多用到在集合中，遍历集合的每一个元素

        //3.借助Java的操作数组的工具类 Arrays.toString  :将参数的数组，以字符串的形式进行输出
//        String ret=Arrays.toString(arr);
//        System.out.println(ret);
        System.out.println(Arrays.toString(arr));
    }




    public static void main3(String[] args) {
        int[] array={1,2,3,4,5,6,7};
        System.out.println(array.length);
        System.out.println(array[3]);
        System.out.println(-1);//如果负数，会报错，因为数组越界一场
        array[3]=19;//把数组的3下标内容改为19
        System.out.println(array[3]);
    }










    //数组
    //什么是数组，数组的定义是什么，数组如何使用
    //数组，存储一组相同数据类型的数据的集合

    public static void main2(String[] args) {
        int[] array={1,2,3,4,5,6,7};//[]里面不能加数字
        //虽然没写new，实际上也是一个对象
        int[] array2=new int[3];
        //new 是关键字，表示实例化一个对象
        //意味着，Java当中的数组，也是一个对象
        //这个数组没有初始化，放的是0

        int[] array3=new int[]{1,2,3,4,5};
        //这里与上面的不同的是，这里给了元素初始化。
    }


















//    //1.A->C            1
//    //2.A->B    A->C  B->C        3
//    //3.A->C    A->B  C->B  A->C  B->A B->C  A->C   7
//    //64:  2^64-1
//    public static void move(char pos1,char pos2){
//        System.out.print(pos1+"->"+pos2+" ");
//    }
//
//    /**
//     *
//     * @param n 代表你盘子的个数
//     * @param pos1  盘子所在的起始位置
//     * @param pos2  盘子的中转位置
//     * @param pos3  盘子的结束位置
//     */
//    public static void hanio(int n,char pos1,char pos2,char pos3){
//        if(n==1){
//            move(pos1,pos3);
//        }else {
//            hanio(n-1,pos1,pos3,pos2);
//            move(pos1,pos3);
//            hanio(n-1,pos2,pos1,pos3);
//        }
//    }
//    public static void main1(String[] args) {
//        hanio(1,'A','B','C');
//        System.out.println();
//        hanio(2,'A','B','C');
//        System.out.println();
//        hanio(3,'A','B','C');
//        System.out.println();
//    }





















//    public static void main(String[] args) {
//        int n = 5;
//        int ret = factor(n);
//        System.out.println("ret = " + ret);
//    }
//    public static int factor(int n) {
//        System.out.println("函数开始, n = " + n);
//        if (n == 1) {
//            System.out.println("函数结束, n = 1 ret = 1");
//            return 1;
//     }else{
//            int ret = n * factor(n - 1);
//            System.out.println("函数结束, n = " + n + " ret = " + ret);
//            return ret;
//        }
//
//
//    }









//    public static void main(String[] args) {
//        int a = 10;
//        int b = 20;
//        int ret = add(a, b);
//        System.out.println("ret = " + ret);
//        double a2 = 10.5;
//        double b2 = 20.5;
//        double ret2 = add(a2, b2);
//        System.out.println("ret2 = " + ret2);
//        double a3 = 10.5;
//        double b3 = 10.5;
//        double c3 = 20.5;
//        double ret3 = add(a3, b3, c3);
//        System.out.println("ret3 = " + ret3);
//    }
//
//    public static int add(int x, int y) {
//        return x + y;
//    }
//
//    public static double add(double x, double y) {
//        return x + y;
//    }
//
//    public static double add(double x, double y, double z) {
//        return x + y + z;
//    }
//

}








//    public static void main1(String[] args) {
//        int a = 10;
//        int b = 20;
//
//// 方法的调用
//        int ret = add(a, b);
//        System.out.println("ret = " + ret);
//    }
//// 方法的定义
//    public static int add(int x, int y) {
//        return x + y;
//    }
//}

